package com.joinval.common.utils;

import ml.dmlc.xgboost4j.java.DMatrix;
import ml.dmlc.xgboost4j.java.XGBoost;
import ml.dmlc.xgboost4j.java.XGBoostError;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;


/**
 * @Author zhizuntop
 * @create 2023/11/13 21:02
 */
public class XGBoostExample {
    public static void main(String[] args) throws XGBoostError, IOException {


//        // 数据导入
//        DMatrix ohiMatrix = new DMatrix("老化故障数据.xlsx#sheet2");
//        DMatrix rpiMatrix = new DMatrix("老化故障数据.xlsx#sheet3");
//
//        float[] ohiLabel = ohiMatrix.getLabel();
//        float[] rpiLabel = rpiMatrix.getLabel();
//        int[] intArr = new int[]{};
//        float[][] ohiZScore = ohiMatrix.slice(2, 6); // Assuming the columns are 3 to 6
//        float[][] rpiZScore = rpiMatrix.slice(2, 6);
//
//        // XGBoost分类
//        int numClass = (int) ohiMatrix.getLabelInfo().get("max_label");
//
//        // 得到训练集和测试样本个数
//        int m = ohiMatrix.rowNum();
//        int n = rpiMatrix.rowNum();
//
//        // 设置参数
//        int numTrees = 500;
//        Map<String, Object> params = new HashMap<>();
//        params.put("objective", "reg:linear");
//        params.put("max_depth", 5);
//        params.put("eta", 0.1);
//
//        // 类别数目（标签应从0开始，到numClass-1截止）
//        int maxSort = numClass - 1;
//
//        // 建立模型
//        long[] trainGroup = {0, m};
//        DMatrix trainMatrix = new DMatrix(ohiZScore, ohiLabel, trainGroup);
//        Map<String, DMatrix> watches = new HashMap<>();
//        watches.put("train", trainMatrix);
//        XGBoost model = XGBoost.train(trainMatrix, params, numTrees, watches, null, null);
//
//        // 预测
//        float[][] tSim1 = model.predict(ohiMatrix);
//        float[][] tSim2 = model.predict(rpiMatrix);
//
//        // 输入到文件（这里需要根据具体情况实现文件写入逻辑）
//        // 例如使用 Apache POI 或其他库进行 Excel 文件写入
//
//        // 释放资源
//        ohiMatrix.dispose();
//        rpiMatrix.dispose();
    }
}
